#ifndef CAMERA_UTILS_H
#define CAMERA_UTILS_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <time.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

// 内存写入数据结构
struct MemoryStruct {
    char *memory;
    size_t size;
};

// 摄像头配置结构体
typedef struct {
    char ip[20];
    char username[32];
    char password[32];
    char save_dir[128];
    char prefix[32];
} CameraConfig;

// 写入数据的回调函数
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream);

// 写入数据到内存的回调函数
size_t write_data_to_memory(void *contents, size_t size, size_t nmemb, void *userp);

// 检查数据是否是有效的JPEG
int is_valid_jpeg(unsigned char *data, size_t size);

// 从单个摄像头获取图像
int capture_image(const CameraConfig *config);

// 尝试从400W摄像头获取图像，测试多个URL
int try_camera_400w_urls(const CameraConfig *config, const char *time_str, const char *filepath);

// 尝试单个URL（带数据验证）
int try_single_url_with_validation(const CameraConfig *config, const char *url, const char *filepath);

// 尝试带认证信息的URL（带数据验证）
int try_auth_url_with_validation(const CameraConfig *config, const char *url, const char *filepath);

// 摄像头线程函数
void *camera_thread(void *arg);

// 创建目录（如果不存在）
int create_directory(const char *path);

// 获取格式化的当前时间字符串
void get_time_string(char *buffer, size_t size);

// 设置摄像头时间与系统时间同步
int set_camera_time(const CameraConfig *config);

#endif /* CAMERA_UTILS_H */ 